package com.atguigu.gmall.realtime.utils;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * Author: Felix
 * Date: 2021/8/10
 * Desc:  日期转换的工具类
 *  SimpleDateFormat是线程不安全的,
 *  在JDK1.8之后，使用DateTimeFormatter类替换
 *  局部变量不涉及线程安全问题
 *  多个对象访问变量才考虑线程安全问题，比如成员变量，或者工具类的时候
 */
public class DateTimeUtil {
    //定义时间转换格式
    //private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //线程安全
    private static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    //将日期对象转换为字符串
    public static String toYMDHMS(Date date){
        //String dateStr = sdf.format(date);  //线程安全
        //return dateStr;
        //时间,时区
        LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
        return dtf.format(localDateTime);
    }

    //将字符串日期转换为时间毫秒数
    public static Long toTs(String dateStr){
        //Long ts = null;
        //try {
        //   ts = sdf.parse(dateStr) .getTime();
        //} catch (ParseException e) {
        //   e.printStackTrace();
        //}
        //Date====LocalDateTime  Calendar====Instant
        //时间,时区
        LocalDateTime localDateTime = LocalDateTime.parse(dateStr, dtf);
        long ts = localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
        return ts;
    }

    public static void main(String[] args) {
        //时区
        System.out.println(ZoneId.systemDefault());
    }
}

























